package Constants;

use strict;
use warnings;
use utf8;
use Exporter 'import';

# 导出所有枚举常量
our @EXPORT_OK = qw(
    LanguageType_Unknown
    LanguageType_Java
    LanguageType_Csharp
    RelationType_Unknown
    RelationType_HasOne
    RelationType_HasMany
    PropertyType_Unknown
    PropertyType_Persistent
    PropertyType_Calculated
    PropertyType_Related
    PropertyType_Static
    AccessType_Unknown
    AccessType_Public
    AccessType_Protected
    AccessType_Private
    DataType_Unknown
    DataType_Int
    DataType_Long
    DataType_String
    DataType_String128
    DataType_String256
    DataType_String512
    DataType_Json
    DataType_DateTime
    DataType_Bool
    DataType_Text
    DataType_LongText
    DataType_Collection
    DataType_Identity
    IdentityType_Unknown
    IdentityType_Long
    IdentityType_String
    IdentityType_UUID
    IdentityType_Snowflake
);

# 语言类型
use constant {
    LanguageType_Unknown => 0, # 未知
    LanguageType_Java => 1, # Java
    LanguageType_Csharp => 2, # C#
};

# 关系类型
use constant {
    RelationType_Unknown => 0, # 未知
    RelationType_HasOne => 1, # 拥有一个
    RelationType_HasMany => 2, # 拥有多个
};

# 属性类型
use constant {
    PropertyType_Unknown => 0, # 未知
    PropertyType_Persistent => 1, # 持久属性
    PropertyType_Calculated => 2, # 计算属性
    PropertyType_Related => 3, # 关联属性
    PropertyType_Static => 4, # 静态属性
};

# 访问类型
use constant {
    AccessType_Unknown => 0, # 无
    AccessType_Public => 1, # 公开
    AccessType_Protected => 2, # 受保护的
    AccessType_Private => 3, # 私有的
};

# 数据类型
use constant {
    DataType_Unknown => 0, # 无
    DataType_Int => 1, # 整形
    DataType_Long => 2, # 长整型
    DataType_String => 3, # 标准字符串
    DataType_String128 => 4, # 128 长度的字符串
    DataType_String256 => 5, # 256 长度的字符串
    DataType_String512 => 6, # 512 长度的字符串
    DataType_Json => 7, # Json 字符串
    DataType_DateTime => 8, # 日期
    DataType_Bool => 9, # Bool 值
    DataType_Text => 10, # 文本
    DataType_LongText => 11, # 长文本
    DataType_Collection => 12, # 集合
    DataType_Identity => 13, # 标识符
};

# 标识符类型
use constant {
    IdentityType_Unknown => 0, # 未知
    IdentityType_Long => 1, # 长整型
    IdentityType_String => 2, # 字符串型
    IdentityType_UUID => 3, # 统一标识符
    IdentityType_Snowflake => 4, # 雪花 Id
};

1;
